﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LOGIC
{
    ///Logisk klass som hanterar företagsgäster, ärver från logik klassen LogicGuest.
    public class LogicCompanyGuest :LogicGuest
    {
       private DB.Gäst companyGuest;

        public LogicCompanyGuest()
        {
        }
        
        private LogicCompanyGuest(DB.Gäst guestObject)
        {
            this.companyGuest = guestObject;
        }
        private LogicSession session;
        public LogicCompanyGuest(LogicSession session)
            : base(session)
        {
            this.session = session;
        }

        //Get-metoder
        #region
        public string Företagsnamn
        {
            get { return companyGuest.företagsNamn; }
        }
        public string Referens
        {
            get { return companyGuest.kontaktPerson; }
        }
        public string Adress
        {
            get { return companyGuest.gatuAdress; }
        }
        public string Postnr
        {
            get { return companyGuest.postNr; }
        }
        public string Telefonnr
        {
            get { return companyGuest.telefonNr; }
        }
        public int Kreditgräns
        {
            get { return (int)companyGuest.kreditgräns; }
        }
        public string Orgnr
        {
            get { return companyGuest.orgNr; }
        }
        public string Ort
        {
            get { return companyGuest.ort; }
        }
        public int Rabatt
        {
            get { return (int)companyGuest.rabatt; }
        }
        public int GästNr
        {
            get { return companyGuest.gästNr; }
        }
        #endregion

        /// <summary>
        /// Metod som skapar en ny företagsgäst (används endast i bokningsfönstret)
        /// </summary>
        /// <param name="orgNr">Företagets organisationsnummer</param>
        /// <param name="companyName">Företagsnamn</param>
        /// <param name="reference">Kontaktpersonens namn</param>
        /// <param name="address">Företagets gatuadress</param>
        /// <param name="zip">Företagets postnr</param>
        /// <param name="ort">Företagets ort</param>
        /// <param name="phonenumber">Företagets telefonnummer</param>
        /// <param name="creditLimit">Företagets kreditgräns (sätts till 100000 vilket marknadschefen sedan kan ändra i administrationen)</param>
        /// <returns></returns>
        public static LogicCompanyGuest NewCompanyGuest(string orgNr, string companyName, string reference, string address, string zip,string ort, string phonenumber, int creditLimit)
        {
            return new LogicCompanyGuest(LogicSession.TheSession.Db.NewCompanyGuest(orgNr, companyName, reference, address, zip,ort,phonenumber, creditLimit));
        }

        /// <summary>
        /// Metod för att ändra en företagsgästuppgifter i gästregistret. (används i bokningsfönstret för ändringar av t.ex. telefonnummer, kontaktperson m.m.)
        /// </summary>
        /// <param name="tempId">företagets gästnr</param>
        /// <param name="tempOrgNr">Företagets organisationsnummer</param>
        /// <param name="tempCompName">Företagsnamn</param>
        /// <param name="tempRef">Företagets kontakperson</param>
        /// <param name="tempAddress">Företagets gatuadress</param>
        /// <param name="tempZip">Företagets postnummer</param>
        /// <param name="tempCity">Företagets ort</param>
        /// <param name="tempPhone">Företagets telefonnummer</param>
        public static void ChangedCoGuest(int tempId, string tempOrgNr, string tempCompName, string tempRef, string tempAddress, string tempZip, string tempCity, string tempPhone)
        {
            LogicSession.TheSession.Db.ChangedCoGuest(tempId, tempOrgNr, tempCompName, tempRef, tempAddress, tempZip, tempCity, tempPhone);
        }

        /// <summary>
        /// Metod för att ändra företagetsgästers kreditgränser och rabatter. 
        /// </summary>
        /// <param name="tempId">Företagets gästnr</param>
        /// <param name="tempDiscount">Företagets rabattsats</param>
        /// <param name="tempCredit">Företagets kreditgräns</param>
        public static void ChangedGuest(int tempId, int tempDiscount, int tempCredit)
        {
            LogicSession.TheSession.Db.ChangedGuest(tempId, tempDiscount, tempCredit);
        }

        /// <summary>
        /// Metod för att hämta in alla företagsgäster till registret i administrationen
        /// </summary>
        /// <returns></returns>
        public IQueryable GetAllCoGuests()
        {
            return LogicSession.TheSession.Db.GetAllCoGuests();
        }

        /// <summary>
        /// Metod för att söka ut företagsgäst på företagsnamn
        /// </summary>
        /// <param name="tempCoName">Företagsnamn</param>
        /// <returns></returns>
        public IQueryable GetCoGuestName(string tempCoName)
        {
            return LogicSession.TheSession.Db.GetCoGuestByName(tempCoName);
        }

        /// <summary>
        /// Metod för att söka ut företagsgäst på organisationsnummer
        /// </summary>
        /// <param name="tempOrgNr">Företagets organisationsnummer</param>
        /// <returns></returns>
        public IQueryable GetCoGuestOrgNr(string tempOrgNr)
        {
            return LogicSession.TheSession.Db.GetCoGuestByOrgNr(tempOrgNr);
        }

        /// <summary>
        /// Metod för att söka ut företagsgäst på gästnummer
        /// </summary>
        /// <param name="tempId">Företagets gästnummer</param>
        /// <returns></returns>
        public IQueryable GetCoGuestById(int tempId)
        {
            return LogicSession.TheSession.Db.GetCoGuestById(tempId);
        }
                



    }
}
